#ifndef __THREAD_SYNC_H
#define __THREAD_SYNC_H
#include <asm-i386/types.h>
#include <linux/thread.h>

/* 信号量结构 */
struct semaphore {
   uint8_t  value;
   struct list_head waiters;
};

/* 锁结构 */
struct lock {
   struct   task_struct* holder;	    // 锁的持有者
   struct   semaphore semaphore;	    // 用二元信号量实现锁
   uint32_t holder_repeat_nr;		    // 锁的持有者重复申请锁的次数
};

extern void sema_init(struct semaphore* psema, uint8_t value);
extern void sema_down(struct semaphore* psema);
extern void sema_up(struct semaphore* psema);
extern void lock_init(struct lock* plock);
extern void lock_acquire(struct lock* plock);
extern void lock_release(struct lock* plock);
#endif
